// 表单对象
var ikeaForm = Ext.create('Ext.form.Panel', {
	bodyPadding : 10,
	border : 0,
	url : 'roleAction!saveOrUpdate.action',
	layout : 'anchor',
	defaults : {
		anchor : '95%',
		labelWidth:70
	},
	defaultType : 'textfield',
	items : [ {
		xtype : 'hiddenfield',
		name : 'role.id'
	}, {
		fieldLabel : '角色名称<font color=red>*</font>',
		name : 'role.name',
		allowBlank : false
	}, {
		fieldLabel : '角色代码',
		name : 'role.code'
	}, {
		xtype : 'textareafield',
		fieldLabel : '角色说明',
		name : 'role.remark'
	}]
});
// 选中父节点的时候，选中子节点
function setChildrenChecked(node, checked) {
	node.eachChild(function(child) {
		child.set('checked', checked);
		if (!child.isLeaf()) {
			setChildrenChecked(child, checked);
		}
	});
}
// 选中子节点的时候，选中父节点
function setParentChecked(node) {
	node.set('checked', true);
	var pnode = node.parentNode;
	if (pnode) {
		setParentChecked(pnode);
	}
}
// 定义一个弹出新增窗口
var ikeaWin = Ext.create('Ext.window.Window', {
	title : '新增',
	height : 250,
	width : 500,
	modal : true,
	layout : 'fit',
	closeAction : 'hide',
	closable : true,
	items : [ ikeaForm ],
	listeners : {
		show : function() {
			ikeaForm.getForm().reset();
		}
	},
	buttons : [{
		text : '提交',
		formBind : true, // only enabled once the form is
		handler : function() {
			var form = ikeaForm.getForm();
			form.submit({
				success : function(form, action) {
					// console.log(action.result);
					var msg = "新增成功！";
					var id = form.findField('role.id').getValue();
					if (id) {
						msg = "修改成功！";
					}
					Ext.Msg.show({
						title : '提示',
						msg : msg,
						buttons : Ext.Msg.OK,
						width : 300,
						fn : function() {
							store.reload();
						}
					});
					ikeaWin.hide();
				}
			});
		}
	},{
		text : '取消',
		handler : function() {
			ikeaWin.close();
		}
	}],
	buttonAlign:'center'
});
// 定义数据结构模型
Ext.define('role', {
	extend : 'Ext.data.Model',
	fields : [ {
		name : 'id',
		type : 'string'
	}, {
		name : 'name',
		type : 'string'
	}, {
		name : 'code',
		type : 'string'
	}, {
		name : 'remark',
		type : 'string'
	}, {
		name : 'createtime',
		type : 'string'
	} ]
});

// 创建数据源
var store = Ext.create('Ext.data.Store', {
	model : 'role',
	pageSize : 20,
	proxy : {
		type : 'ajax',
		url : 'roleAction!queryPage.action',
		reader : {
			type : 'json',
			root : 'pageList'
		}
	}
});
// 确保分配权限时，所有模块能显示
//Ext.Ajax.request({
//	url : 'moduleAction!listAllModulesCheckbox.action',
//	success : function(response) {
//	},
//	failure : function(response, opts) {
//		console.log('通信错误:=' + response.status);
//	}
//});

/**
 * 角色列表
 */
var grid = Ext.create('Ext.grid.Panel',{
	store : store,
	border : 0,
	selModel : Ext.create('Ext.selection.CheckboxModel'),
	columns : [{
		text : '角色名称',
		dataIndex : 'name',
		width : 200
	}, {
		text : '角色代码',
		sortable : true,
		dataIndex : 'code',
		width : 200
	}, {
		text : '更新时间',
		sortable : false,
		dataIndex : 'createtime',
		width : 200
	},{
		text : '角色说明',
		dataIndex : 'remark',
		flex: 1
	}],
	stripeRows : true,
	tbar : [{
			xtype : 'button',
			text : '新增',
			iconCls : 'icon-add',
			handler : function() {
				ikeaWin.setTitle('新增');
				ikeaWin.show();
				}
			},
			{
			xtype : 'button',
			text : '修改',
			iconCls : 'icon-edit',
			handler : function() {
				var selMode = grid.getSelectionModel();// 取得选择模式
				var model = selMode.getSelection();
				if (model.length == 1) {
					var raw = model[0].raw;
					ikeaWin.setTitle('修改');
					ikeaWin.show();
					ikeaForm.getForm().findField('role.id').setValue(raw.id);
					ikeaForm.getForm().findField('role.name').setValue(raw.name);
					ikeaForm.getForm().findField('role.code').setValue(raw.code);
					ikeaForm.getForm().findField('role.remark').setValue(raw.remark);
				} else if (model.length > 1) {
					Ext.Msg.alert('提示', '只能选择一项修改！');
				} else {
					Ext.Msg.alert('提示', '请选择！');
				}

			}
			},
			{
			xtype : 'button',
			text : '删除',
			iconCls : 'icon-delete',
			handler : function() {
				var selMode = grid.getSelectionModel();
				var model = selMode.getSelection();
				if (model[0]) {
					var ids = [];// 删除多个
					Ext.Array.each(model, function(item) {
						ids.push(item.raw.id);
					});
					Ext.Msg.show({
						title : '确认删除',
						buttons : Ext.MessageBox.OKCANCEL,
						msg : '确定删除选择项?',
						fn : function(btn) {
							if (btn == 'ok') {
								Ext.Ajax.request({
									url : 'roleAction!delete.action?ids='+ ids,
									success : function(response) {
										Ext.Msg.show({
											title : '提示',
											msg : '删除成功！',
											buttons : Ext.Msg.OK,
											width : 300,
											fn : function() {
												store.reload();
											}
										});
									},
									failure : function(response,opts) {
										console.log('server-side failure with status code '+ response.status);
									}
								});
							}
						}
					});
				} else {
					Ext.Msg.alert('提示', '请选择要删除的数据行！');
				}
			}},
			{
				xtype : 'button',
				text : '设定权限',
				iconCls : 'icon-edit',
				handler : function() {
					var selMode = grid.getSelectionModel();
					var model = selMode.getSelection();
					if (model.length == 1) {
						Ext.define('Module', {
							extend : 'Ext.data.Model',
							fields : [ 'id', {
								name : 'name',
								type : 'string'
							}]
						});
						var moduleStore = Ext.create('Ext.data.TreeStore',{
							model : 'Module',
							proxy : {
								type : 'ajax',
								url:'moduleAction!getTreeCheckBypid.action'
							}
						});

						var loadMarsk = new Ext.LoadMask(
								document.body, {
									msg : 'Loading...',
									removeMask : true,// 完成后移除
									disabled : false,
									store : moduleStore
								});

						var moduleGrid = Ext.create('Ext.tree.Panel',{
							store : moduleStore,
							useArrows : true,
							rootVisible : false,
							resizable : false,
//							width : 460,
							margin : '5 5 5 5',
							multiSelect : true,
							loadMask : true,
							columns : [{
									xtype : 'treecolumn', 
									text : '名称',
									sortable : true,
									flex : 1,
									dataIndex : 'name'
								}],
							listeners : {
								beforeload : function() {
									loadMarsk.show();
								},
								load : function() {
									Ext.Ajax.request({
										url : 'roleAction!queryModuleIds.action?roleid='
												+ model[0].raw.id,
//										method : 'POST',
										success : function(response) {
											var res = response.responseText;
											res=Ext.JSON.decode(res);
											res = res.list; // 与上面rmlist.action方法名对应
											// console.log(res);
											Ext.Array.each(res,function(item) { // ext的循环，每条json对象的moduleid
												var node = moduleStore.getNodeById(item.moduleid);
												if (node) {
													node.set('checked',true);
												}
											});
										}
									});
									loadMarsk.hide();
								},
								checkchange : function(node,checked,opt) {
									node.eachChild(
										function(child) {
											child.set('checked',checked);
											if (!child.isLeaf()) {
												setChildrenChecked(child,checked);
											}
										});
									setParentChecked(node.parentNode);
								}

							}
						});

						var win = new Ext.window.Window({
							title : '角色：'+ model[0].raw.name+ ',修改权限：',
							modal : true,
							// autoScroll:'auto',
							overflowY : 'auto',
							// y:50,
							height : 400,
							width : 460,
							layout:'fit',
							items : [moduleGrid],
							buttons : [{
								text : '提交',
								handler : function() {
									var roleIds = [];
									roleIds.push(model[0].raw.id);
									var m_nodes = moduleGrid.getChecked();
									var moduleIds = [];
									Ext.Array.each(m_nodes,function(item) {
										if (item.raw.id != 'root') {
											moduleIds.push(item.raw.id);
										}
									});
									if (moduleIds.length < 1) {
										Ext.Msg.alert('提示','请选择模块！');
										return;
									}else if(moduleIds.length > 0) {
										Ext.Ajax.request({
											url : 'roleAction!saveRoleModule.action',
											params:{'roleid':roleIds,'moduleids':moduleIds},
											method : 'POST',
											success : function(response) {
												Ext.Msg.show({
													title : '提示',
													msg : '保存成功！',
													buttons : Ext.Msg.OK,
													width : 300,
													fn : function() {
														store.reload();
														win.hide();
													}
												});
											},
											failure : function(response,opts) {
												console.log('server-side failure with status code '+ response.status);
											}
										});
									}
								}
							},{
								text : '取消',
								handler : function() {
									win.hide();
								}
							  }],
						  buttonAlign:'center'
						});
						win.show();
					} else {
						Ext.Msg.alert('提示', '请选择一行数据  设定权限！');
					}

				}
			} ],
	bbar : Ext.create('Ext.PagingToolbar', {
		pageSize : 20,// 每页20条
		store : store,
		displayInfo : true,
		plugins : Ext.create('Ext.ux.ProgressBarPager', {})
	})
});

Ext.onReady(function() {
	Ext.create('Ext.container.Viewport', {
		layout : 'fit',
		items : [grid]
	});
	store.load();
});
